package com.atguigu.tingshu.album.service.impl;

import com.alibaba.fastjson.JSON;
import com.atguigu.tingshu.album.config.VodConstantProperties;
import com.atguigu.tingshu.album.service.VodService;
import com.atguigu.tingshu.vo.album.TrackMediaInfoVo;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.vod.v20180717.VodClient;
import com.tencentcloudapi.vod.v20180717.models.*;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


@Service
@Slf4j
public class VodServiceImpl implements VodService {

    @Autowired
    private VodConstantProperties vodConstantProperties;



    @SneakyThrows   // 处理异常
    @Override
    public TrackMediaInfoVo getTrackMediaInfo(String mediaFileId) {

        // 创建凭证对象，封装访问秘钥信息
        Credential cred = new Credential(vodConstantProperties.getSecretId(), vodConstantProperties.getSecretKey());

        // 实例化要请求产品的client对象,clientProfile是可选的
        VodClient client = new VodClient(cred, vodConstantProperties.getRegion());

        // 实例化一个请求对象,每个接口都会对应一个request对象
        DescribeMediaInfosRequest req = new DescribeMediaInfosRequest();
        String[] mediaFileIds = {mediaFileId};
        req.setFileIds(mediaFileIds);

        // 返回的resp是一个DescribeMediaInfosResponse的实例，与请求对象对应
        DescribeMediaInfosResponse response = client.DescribeMediaInfos(req);

        // 输出json格式的字符串回包
        log.info("声音详情返回结课: {}", JSON.toJSONString(response));

        if (response.getMediaInfoSet().length > 0) {
            MediaInfo mediaInfo = response.getMediaInfoSet()[0];
            TrackMediaInfoVo trackMediaInfoVo = new TrackMediaInfoVo();
            trackMediaInfoVo.setSize(mediaInfo.getMetaData().getSize());
            trackMediaInfoVo.setDuration(mediaInfo.getMetaData().getDuration());
            trackMediaInfoVo.setMediaUrl(mediaInfo.getBasicInfo().getMediaUrl());
            trackMediaInfoVo.setType(mediaInfo.getBasicInfo().getType());
            return trackMediaInfoVo;
        }

        return null;
    }
    @SneakyThrows   // 处理异常
    @Override
    public void removeTrack(String mediaFileId) {

        Credential cred = new Credential(vodConstantProperties.getSecretId(), vodConstantProperties.getSecretKey());

        // 实例化要请求产品的client对象,clientProfile是可选的
        VodClient client = new VodClient(cred, vodConstantProperties.getRegion());

        // 实例化一个请求对象,每个接口都会对应一个request对象
        DeleteMediaRequest req = new DeleteMediaRequest();
        req.setFileId(mediaFileId);

        // 返回的resp是一个DeleteMediaResponse的实例，与请求对象对应
        DeleteMediaResponse response = client.DeleteMedia(req);

        // 输出json格式的字符串回包
        log.info("声音删除返回结课: {}", JSON.toJSONString(response));
    }


}
